package entity

// SyncRequest 数据同步请求结构
type SyncRequest struct {
	SyncDevices  bool `json:"sync_devices" binding:"omitempty"`  // 是否同步设备信息
	SyncServers  bool `json:"sync_servers" binding:"omitempty"`  // 是否同步服务器信息
	SyncPdus     bool `json:"sync_pdus" binding:"omitempty"`     // 是否同步PDU信息
	SyncSwitches bool `json:"sync_switches" binding:"omitempty"` // 是否同步交换机信息
}

// SyncResponse 数据同步响应结构
type SyncResponse struct {
	DeviceCount  int `json:"device_count"`  // 同步的设备数量
	ServerCount  int `json:"server_count"`  // 同步的服务器数量
	PduCount     int `json:"pdu_count"`     // 同步的PDU数量
	SwitchCount  int `json:"switch_count"`  // 同步的交换机数量
	TotalCount   int `json:"total_count"`   // 总同步数量
	SuccessCount int `json:"success_count"` // 成功同步数量
	FailedCount  int `json:"failed_count"`  // 失败同步数量
}

// CompareResponse 数据比对响应结构
type CompareResponse struct {
	DeviceComparison DeviceComparisonResult `json:"device_comparison"` // 设备比对结果
	ServerComparison ServerComparisonResult `json:"server_comparison"` // 服务器比对结果
	PduComparison    PduComparisonResult    `json:"pdu_comparison"`    // PDU比对结果
	SwitchComparison SwitchComparisonResult `json:"switch_comparison"` // 交换机比对结果
	Summary          ComparisonSummary      `json:"summary"`           // 汇总信息
}

// DeviceComparisonResult 设备比对结果
type DeviceComparisonResult struct {
	TotalCount      int                  `json:"total_count"`      // 总设备数量
	SyncedCount     int                  `json:"synced_count"`     // 已同步数量
	UnsyncedCount   int                  `json:"unsynced_count"`   // 未同步数量
	ExcludedCount   int                  `json:"excluded_count"`   // 排除的车载设备数量
	UnsyncedDevices []UnsyncedDeviceInfo `json:"unsynced_devices"` // 未同步的设备列表
}

// ServerComparisonResult 服务器比对结果
type ServerComparisonResult struct {
	TotalCount      int                  `json:"total_count"`      // 总服务器数量
	SyncedCount     int                  `json:"synced_count"`     // 已同步数量
	UnsyncedCount   int                  `json:"unsynced_count"`   // 未同步数量
	UnsyncedServers []UnsyncedServerInfo `json:"unsynced_servers"` // 未同步的服务器列表
}

// PduComparisonResult PDU比对结果
type PduComparisonResult struct {
	TotalCount    int               `json:"total_count"`    // 总PDU数量
	SyncedCount   int               `json:"synced_count"`   // 已同步数量
	UnsyncedCount int               `json:"unsynced_count"` // 未同步数量
	UnsyncedPdus  []UnsyncedPduInfo `json:"unsynced_pdus"`  // 未同步的PDU列表
}

// SwitchComparisonResult 交换机比对结果
type SwitchComparisonResult struct {
	TotalCount       int                  `json:"total_count"`       // 总交换机数量
	SyncedCount      int                  `json:"synced_count"`      // 已同步数量
	UnsyncedCount    int                  `json:"unsynced_count"`    // 未同步数量
	UnsyncedSwitches []UnsyncedSwitchInfo `json:"unsynced_switches"` // 未同步的交换机列表
}

// ComparisonSummary 比对汇总信息
type ComparisonSummary struct {
	TotalDevices    int `json:"total_devices"`    // 总设备数量（所有类型）
	SyncedDevices   int `json:"synced_devices"`   // 已同步设备数量
	UnsyncedDevices int `json:"unsynced_devices"` // 未同步设备数量
	ExcludedDevices int `json:"excluded_devices"` // 排除的设备数量
}

// UnsyncedDeviceInfo 未同步的设备信息
type UnsyncedDeviceInfo struct {
	DeviceID   string `json:"device_id"`   // 设备ID
	DeviceName string `json:"device_name"` // 设备名称
	IP         string `json:"ip"`          // IP地址
	Type       int    `json:"type"`        // 设备类型
	District   *int   `json:"district"`    // 区域
}

// UnsyncedServerInfo 未同步的服务器信息
type UnsyncedServerInfo struct {
	ID          string `json:"id"`           // 服务器ID
	Name        string `json:"name"`         // 服务器名称
	IP          string `json:"ip"`           // IP地址
	Type        *int   `json:"type"`         // 服务器类型
	StationName string `json:"station_name"` // 车站名称
}

// UnsyncedPduInfo 未同步的PDU信息
type UnsyncedPduInfo struct {
	ID          int64  `json:"id"`           // PDU ID
	Name        string `json:"name"`         // PDU名称
	Number      string `json:"number"`       // 编号
	IP          string `json:"ip"`           // IP地址
	StationName string `json:"station_name"` // 车站名称
}

// UnsyncedSwitchInfo 未同步的交换机信息
type UnsyncedSwitchInfo struct {
	ID          int64  `json:"id"`           // 交换机ID
	Name        string `json:"name"`         // 交换机名称
	IP          string `json:"ip"`           // IP地址
	StationName string `json:"station_name"` // 车站名称
}

// DeviceInfo PIDS设备信息实体（对应 pids_device_info 表）
type DeviceInfo struct {
	DeviceID   string `gorm:"column:device_id;primaryKey" json:"device_id"`
	DeviceName string `gorm:"column:device_name" json:"device_name"`
	IP         string `gorm:"column:ip" json:"ip"`
	Type       int    `gorm:"column:type" json:"type"`         // 1LCD 2LED
	District   *int   `gorm:"column:district" json:"district"` // 区域（1上行、2下行、3站厅、4车载）
}

// ServerInfo PIDS服务器信息实体（对应 pids_server_info 表）
type ServerInfo struct {
	ID          string `gorm:"column:id;primaryKey" json:"id"`
	Name        string `gorm:"column:name" json:"name"`
	IP          string `gorm:"column:ip" json:"ip"`
	Type        *int   `gorm:"column:type" json:"type"`
	StationName string `gorm:"column:station_name" json:"station_name"`
}

// PduInfo PIDS PDU信息实体（对应 pids_pdu_info 表）
type PduInfo struct {
	ID          int64  `gorm:"column:id;primaryKey" json:"id"`
	Name        string `gorm:"column:name" json:"name"`
	Number      string `gorm:"column:number" json:"number"`
	IP          string `gorm:"column:ip" json:"ip"`
	StationName string `gorm:"column:station_name" json:"station_name"`
}

// SwitchInfo PIDS交换机信息实体（对应 pids_switch_info 表）
type SwitchInfo struct {
	ID          int64  `gorm:"column:id;primaryKey" json:"id"`
	Name        string `gorm:"column:name" json:"name"`
	IP          string `gorm:"column:ip" json:"ip"`
	StationName string `gorm:"column:station_name" json:"station_name"`
}

// TableName 指定表名
func (DeviceInfo) TableName() string {
	return "pids_device_info"
}

func (ServerInfo) TableName() string {
	return "pids_server_info"
}

func (PduInfo) TableName() string {
	return "pids_pdu_info"
}

func (SwitchInfo) TableName() string {
	return "pids_switch_info"
}
